# Завантаження покетів та набору даних
library(tidyverse)
TMDB <- read_csv("U:/Master's_work_Boiko/Data_Analysis_movie/tmdb_movies.csv")
TMDB
# Кількість зміних і спостережень
dim(TMDB)
## [1] 10866    21
# Імена зміних
names(TMDB)
##  [1] "id"                   "imdb_id"              "popularity"          
##  [4] "budget"               "revenue"              "original_title"      
##  [7] "cast"                 "homepage"             "director"            
## [10] "tagline"              "keywords"             "overview"            
## [13] "runtime"              "genres"               "production_companies"
## [16] "release_date"         "vote_count"           "vote_average"        
## [19] "release_year"         "budget_adj"           "revenue_adj"
# Видалення нерелевантних даних
TMDB_cleaned <- TMDB %>% select(-c(imdb_id, budget, revenue, homepage, tagline, keywords, overview, production_companies, release_date))
TMDB_cleaned
# Перевірка кількість NA значень у кожній змінній
na_count <- sapply(TMDB_cleaned, function(y) sum(length(which(is.na(y)))))
print(na_count)
##             id     popularity original_title           cast       director 
##              0              0              0             76             44 
##        runtime         genres     vote_count   vote_average   release_year 
##              0             23              0              0              0 
##     budget_adj    revenue_adj 
##              0              0
# Видалення рядків, які містять NA значення
TMDB_cleaned <- na.omit(TMDB_cleaned)
print(sum(is.na(TMDB_cleaned)))
## [1] 0
# Перевірка кількість NA значень у кожній змінній
na_count <- sapply(TMDB_cleaned, function(y) sum(length(which(is.na(y)))))
# Перевірка результату
print(na_count)
##             id     popularity original_title           cast       director 
##              0              0              0              0              0 
##        runtime         genres     vote_count   vote_average   release_year 
##              0              0              0              0              0 
##     budget_adj    revenue_adj 
##              0              0
# Кількість зміних і спостережень
dim(TMDB_cleaned)
## [1] 10732    12
# Перевірка на кількість 0 значень у кожній змінній
zero_count <- sapply(TMDB_cleaned, function(y) sum(y == 0, na.rm = TRUE))
print(zero_count)
##             id     popularity original_title           cast       director 
##              0              0              0              0              0 
##        runtime         genres     vote_count   vote_average   release_year 
##             28              0              0              0              0 
##     budget_adj    revenue_adj 
##           5578           5888
# Видалення рядків, де budget, revenue та runtime дорівнює 0
TMDB_cleaned <- TMDB_cleaned %>%
  filter(budget_adj > 0 & revenue_adj > 0 & runtime > 0)

# Перевірка результату
summary(TMDB_cleaned$budget_adj)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
##         1  13172182  30045239  44289889  60728666 425000000
summary(TMDB_cleaned$revenue_adj)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 2.000e+00 1.841e+07 6.179e+07 1.372e+08 1.634e+08 2.827e+09
summary(TMDB_cleaned$runtime)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    15.0    95.0   106.0   109.2   119.0   338.0
# Кількість зміних і спостережень
dim(TMDB_cleaned)
## [1] 3850   12
# Перевірка на наявність дублікатів
original_nrow <- nrow(TMDB_cleaned)
duplicated_rows <- TMDB_cleaned[duplicated(TMDB_cleaned),]

# Якщо є дублікати, вивести їх кількість
if(nrow(duplicated_rows) > 0) {
  print(paste("Number of duplicated rows: ", nrow(duplicated_rows)))
}
## [1] "Number of duplicated rows:  1"
# Видалення дублікатів
TMDB_cleaned <- distinct(TMDB_cleaned)

# Перевірка результату
new_nrow <- nrow(TMDB_cleaned)
print(paste("Кількість рядків до видалення дублікатів: ", original_nrow))
## [1] "Кількість рядків до видалення дублікатів:  3850"
print(paste("Кількість рядків після видалення дублікатів: ", new_nrow))
## [1] "Кількість рядків після видалення дублікатів:  3849"
# Виведення структури DataFrame, що включає імена та типи змінних, а також перші кілька значень кожної змінної
str(TMDB_cleaned)
## tibble [3,849 × 12] (S3: tbl_df/tbl/data.frame)
##  $ id            : num [1:3849] 135397 76341 262500 140607 168259 ...
##  $ popularity    : num [1:3849] 32.99 28.42 13.11 11.17 9.34 ...
##  $ original_title: chr [1:3849] "Jurassic World" "Mad Max: Fury Road" "Insurgent" "Star Wars: The Force Awakens" ...
##  $ cast          : chr [1:3849] "Chris Pratt|Bryce Dallas Howard|Irrfan Khan|Vincent D'Onofrio|Nick Robinson" "Tom Hardy|Charlize Theron|Hugh Keays-Byrne|Nicholas Hoult|Josh Helman" "Shailene Woodley|Theo James|Kate Winslet|Ansel Elgort|Miles Teller" "Harrison Ford|Mark Hamill|Carrie Fisher|Adam Driver|Daisy Ridley" ...
##  $ director      : chr [1:3849] "Colin Trevorrow" "George Miller" "Robert Schwentke" "J.J. Abrams" ...
##  $ runtime       : num [1:3849] 124 120 119 136 137 156 125 141 91 94 ...
##  $ genres        : chr [1:3849] "Action|Adventure|Science Fiction|Thriller" "Action|Adventure|Science Fiction|Thriller" "Adventure|Science Fiction|Thriller" "Action|Adventure|Science Fiction|Fantasy" ...
##  $ vote_count    : num [1:3849] 5562 6185 2480 5292 2947 ...
##  $ vote_average  : num [1:3849] 6.5 7.1 6.3 7.5 7.3 7.2 5.8 7.6 6.5 8 ...
##  $ release_year  : num [1:3849] 2015 2015 2015 2015 2015 ...
##  $ budget_adj    : num [1:3849] 1.38e+08 1.38e+08 1.01e+08 1.84e+08 1.75e+08 ...
##  $ revenue_adj   : num [1:3849] 1.39e+09 3.48e+08 2.72e+08 1.90e+09 1.39e+09 ...
##  - attr(*, "na.action")= 'omit' Named int [1:134] 372 425 442 466 533 537 539 549 557 588 ...
##   ..- attr(*, "names")= chr [1:134] "372" "425" "442" "466" ...
# Перевірка розміру DataFrame
print(paste("Кількість рядків: ", nrow(TMDB_cleaned)))
## [1] "Кількість рядків:  3849"
print(paste("Кількість стовбців: ", ncol(TMDB_cleaned)))
## [1] "Кількість стовбців:  12"
# Перевірка загальних статистичних характеристик змінних
summary(TMDB_cleaned)
##        id           popularity       original_title         cast          
##  Min.   :     5   Min.   : 0.00112   Length:3849        Length:3849       
##  1st Qu.:  6072   1st Qu.: 0.46334   Class :character   Class :character  
##  Median : 11313   Median : 0.79858   Mode  :character   Mode  :character  
##  Mean   : 39885   Mean   : 1.19293                                        
##  3rd Qu.: 38575   3rd Qu.: 1.37430                                        
##  Max.   :417859   Max.   :32.98576                                        
##    director            runtime         genres            vote_count    
##  Length:3849        Min.   : 15.0   Length:3849        Min.   :  10.0  
##  Class :character   1st Qu.: 95.0   Class :character   1st Qu.:  71.0  
##  Mode  :character   Median :106.0   Mode  :character   Median : 205.0  
##                     Mean   :109.2                      Mean   : 528.4  
##                     3rd Qu.:119.0                      3rd Qu.: 581.0  
##                     Max.   :338.0                      Max.   :9767.0  
##   vote_average    release_year    budget_adj         revenue_adj       
##  Min.   :2.200   Min.   :1960   Min.   :        1   Min.   :2.000e+00  
##  1st Qu.:5.700   1st Qu.:1995   1st Qu.: 13166226   1st Qu.:1.843e+07  
##  Median :6.200   Median :2004   Median : 30050304   Median :6.181e+07  
##  Mean   :6.169   Mean   :2001   Mean   : 44293602   Mean   :1.372e+08  
##  3rd Qu.:6.700   3rd Qu.:2010   3rd Qu.: 60767198   3rd Qu.:1.634e+08  
##  Max.   :8.400   Max.   :2015   Max.   :425000000   Max.   :2.827e+09
# Перевірка перших та останніх рядків DataFrame
head(TMDB_cleaned)
tail(TMDB_cleaned)